c++ accumulate with move instead of copy [migrated]
Posted
by
user74399
on Programmers
See other posts from Programmers
or by user74399
Published on 2012-12-05T13:56:29Z
Indexed on
2012/12/05
17:26 UTC
Read the original article
Hit count: 99
c++
|visual-c++
I have the following code
auto adder = [](string& s1, const string& s2)->string&&
{
if (!s1.empty())
s1 += " ";
s1 += s2;
return move(s1);
};
string test;
test.reserve(wordArray.size() * 10);
string words = accumulate(wordArray.begin(), wordArray.end(), move(test), adder);
What I would like here is to avoid string copying. Unfortunately this is not accomplished by the vs2012 implementation of accumulate. Internally accumulate calls another function _Accumulate and the rvalue functionality gets lost in the process.
It I instead call the _Accumulate function like so
string words = Accumulate(wordArray.begin(), wordArray.end(), move(test), adder);
I get the intended performance gain.
Must the std library be rewritten to take rvalue arguments into consideration?
Is there some other way I may use accumulate to accomplish what I want without cheating to much?
© Programmers or respective owner